package com.inspur.edp.formserver.vmmanager.lowcode;

import com.inspur.edp.formserver.viewmodel.GspViewModel;
import com.inspur.edp.formserver.viewmodel.extendinfo.api.GspVoExtendInfoService;
import com.inspur.edp.formserver.viewmodel.extendinfo.entity.GspVoExtendInfo;
import com.inspur.edp.lcm.metadata.api.entity.GspMetadata;
import com.inspur.edp.lcm.metadata.api.entity.MetadataPackage;
import com.inspur.edp.lcm.metadata.api.entity.ProcessMode;
import io.iec.edp.caf.boot.context.CAFContext;
import io.iec.edp.caf.commons.utils.SpringBeanUtils;
import io.iec.edp.caf.core.context.ICAFContextService;
import io.iec.edp.caf.core.session.CafSession;
import io.iec.edp.caf.core.session.ICafSessionService;
import io.iec.edp.caf.core.session.SessionType;
import io.iec.edp.caf.core.session.core.CAFSessionThreadHolder;
import io.iec.edp.caf.tenancy.api.ITenantService;
import io.iec.edp.caf.tenancy.api.entity.Tenant;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.springframework.security.core.context.SecurityContextHolder;

public class BSessionUtil {

  public static void wrapFirstTenantBSession(Consumer<Tenant> consumer) {
//    ICafSessionService service = SpringBeanUtils.getBean(ICafSessionService.class);
//    ITenantService tenantService = SpringBeanUtils.getBean(ITenantService.class);
//
//    final String lang="zh-".concat("CHS");
//    List<Tenant> tenants = tenantService.getAllTenants(lang);
//    if(tenants == null || tenants.isEmpty()) {
//      throw new RuntimeException("不存在有效的租户");
//    }
//
//    CafSession oldSession = CAFContext.current.getCurrentSession();
//    if(oldSession != null) {
//      clearSession();
//    }
//      try {
//        final String user="ad".concat("min");
//        for (int i = 0; i < tenants.size(); ++i) {
//          Tenant tenant = tenants.get(i);
//          clearSession();
//          CafSession cafSession = service.create(tenant.getId(),user , lang, new HashMap<>(), SessionType.backend);
//          CAFSessionThreadHolder.setCurrentSession(cafSession);
//          ICAFContextService contextService = SpringBeanUtils.getBean(ICAFContextService.class);
//          contextService.setCurrentSU("Bcc");
//
//          consumer.accept(tenant);
//        }
//      } finally {
//        clearSession();
//    }
  }
  private static void clearSession() {
//    CAFSessionThreadHolder.purge();
//    SecurityContextHolder.clearContext();
  }

  public static void handleMdPkg(MetadataPackage metadataPackage,
      Function<String, GspMetadata> getMetadata) {
//    try {
////      if (metadataPackage.getHeader().getProcessMode() != ProcessMode.interpretation) {
////        //如果不是无需生成代码的元数据包，直接忽略
////        return;
////      }
//
//      List<GspMetadata> packageMetadataList = metadataPackage.getMetadataList();
//      if (packageMetadataList == null || packageMetadataList.isEmpty()) {
//        //如果元数据包下不存在元数据
//        return;
//      }
//      List<GspMetadata> metadatas = packageMetadataList.stream()
//          .filter(item -> item.getHeader().getType().equals("GSPViewModel"))
//          .collect(Collectors.toList());
//      if (metadatas.isEmpty()) {
//        return;
//      }
//
//      BSessionUtil.wrapFirstTenantBSession(tenant -> {
//        //获取当前已部署的eapi版本，并移除未变动的Eapi元数据
//        GspVoExtendInfoService beInfoService = SpringBeanUtils
//            .getBean(GspVoExtendInfoService.class);
//        List<GspVoExtendInfo> infos = new ArrayList(metadatas.size());
//        for (GspMetadata metadata : metadatas) {
//          GspViewModel be = (GspViewModel) getMetadata.apply(metadata.getHeader().getId())
//              .getContent();
//          if (be.getGeneratedConfigID() == null) {
//            continue;
//          }
//
//          GspVoExtendInfo existing = beInfoService.getVoExtendInfo(be.getID());
//
//          if (existing == null || !be.getGeneratedConfigID().equals(existing.getConfigId())) {
//            GspVoExtendInfo info = new GspVoExtendInfo();
//            info.setId(be.getID());
//            info.setConfigId(be.getGeneratedConfigID());
//            //拿不到用户名称
////            info.setCreatedBy(CAFContext.current.getCurrentSession().getUserName());
////            info.setLastChangedBy(CAFContext.current.getCurrentSession().getUserName());
//            info.setCreatedOn(Date.from(CAFContext.current.getCurrentDateTime().toInstant()));
//            info.setLastChangedOn(Date.from(CAFContext.current.getCurrentDateTime().toInstant()));
//            if(!be.getIsVirtual()){
//              info.setBeSourceId(be.getMapping().getTargetMetadataId());
//            }
//            infos.add(info);
//          }
//          if(existing!=null){
//            existing.setLastChangedOn(Date.from(CAFContext.current.getCurrentDateTime().toInstant()));
//            infos.add(existing);
//          }
//        }
//        if (!infos.isEmpty()) {
//          beInfoService.saveGspVoExtendInfos(infos);
//        }
//      });
//    } catch (Exception e) {
//      System.out.println("部署解析BE元数据出错：" + e.getMessage());
//
//    }
  }
}
